package cn.iocoder.yudao.module.data.third.eastMoney.response;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.module.data.third.IBaseResponse;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 *
 * </p>
 *
 * @author pokbrin
 * @date 2023-07-06 16:49
 */
@Data
public class EastMoneyStockHistoryKLineResponse implements IBaseResponse {


    private Integer rc;
    private Integer rt;
    private Long svr;
    private Integer lt;
    private Integer full;
    private String dlmkts;
    private InnerData data;

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class InnerData {
        private String code;
        private Integer market;
        private String name;
        private Integer decimal;
        private Integer dktotal;
        /**
         * 前一个K线数据的收盘价
         */
        private BigDecimal preKPrice;
        /**
         * 日期时间：K线数据的日期，格式为 "yyyy-MM-dd"。
         * 开盘价：K线数据的开盘价。
         * 最高价：K线数据的最高价。
         * 最低价：K线数据的最低价。
         * 收盘价：K线数据的收盘价。
         * 成交量：K线数据的成交量（以手为单位）。
         * 成交额：K线数据的成交额（以元为单位）。
         * 振幅：K线数据的振幅。
         * 涨跌额：K线数据的涨跌额。
         * 涨跌幅：K线数据的涨跌幅。
         * 换手率：K线数据的换手率。
         */
        private List<String> klines;
    }

    @Data
    public static class Holder {
        private EastMoneyStockHistoryKLineResponse response;
        private List<KLineVO> KLines;

        public Holder(EastMoneyStockHistoryKLineResponse response) {
            this.response = response;
            this.getKLines();
        }

        public List<KLineVO> getKLines() {
            if (CollUtil.isNotEmpty(this.KLines)) {
                return this.KLines;
            }
//            return this.KLines = CollUtil.emptyIfNull(response.getData().getKlines())
//                    .stream().map(t -> {
//                        KLineVO kv = new KLineVO();
//                        kv.setTime();
//                        kv.setOpen();
//                        kv.setClose();
//                        kv.setHigh();
//                        kv.setLow();
//                        kv.setVol();
//                        kv.setAmount();
//                        kv.setAvgPrice();
//                        return kv;
//                    }).collect(Collectors.toList());
            //TODO
            return null;
        }
    }

    @Data
    public static class KLineVO {
        /**
         * 时间(精确到分钟) yyyy-MM-dd HH:mm
         */
        private LocalDate time;
        /**
         * 开盘价
         */
        private BigDecimal open;
        /**
         * 收盘价
         */
        private BigDecimal close;
        /**
         * 最高价
         */
        private BigDecimal high;
        /**
         * 最低价
         */
        private BigDecimal low;
        /**
         * 成交量(手)
         */
        private Integer vol;
        /**
         * 成交额(元)
         */
        private BigDecimal amount;
        /**
         * 均价
         */
        private BigDecimal avgPrice;
    }
}
